# coding=utf-8
from ..ToolsConfig import *


class ResultTimer(object):
    """
    结果定时器, 在返回True时结束循环
    """

    def __init__(self, func, delay=0.0, *args, **kwargs):
        """
        :param func: 执行函数
        :param delay: 执行延迟
        """
        self.func = func
        self.delay = delay
        self.args = args
        self.kwargs = kwargs
        self.gameComp = serverCompFactory.CreateGame(LevelId) or clientCompFactory.CreateGame(LevelId)

    def __timerFunc__(self):
        result = self.func(*self.args, **self.kwargs)
        if not result: self.Start()

    def Start(self):
        """
        开始执行定时器
        :return:
        """
        self.gameComp.AddTimer(self.delay, self.__timerFunc__, *self.args, **self.kwargs)


class TimesTimer(object):
    """
    次数定时器
    """

    def __init__(self, times, func, delay=0.0, *args, **kwargs):
        """
        :param times: 循环次数
        :param func: 执行函数
        :param delay: 执行延迟
        """
        self.func = func
        self.delay = delay
        self.times = times
        self.args = args
        self.kwargs = kwargs
        self.gameComp = serverCompFactory.CreateGame(LevelId) or clientCompFactory.CreateGame(LevelId)

    def __func(self, *args, **kwargs):
        self.times -= 1
        self.func(*args, **kwargs)
        if self.times >= 0:
            self.gameComp.AddTimer(self.delay, self.__func, *self.args, **self.kwargs)

    def Start(self):
        """
        开始执行定时器
        :return:
        """
        if self.times > 0:
            self.times -= 1
            self.gameComp.AddTimer(self.delay, self.__func, *self.args, **self.kwargs)
